home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / games / ippon / source.lzh / FuncEnemy / zakoa.c < prev    next >
C/C++ Source or Header  |  2000-07-07  |  2KB  |  130 lines

  1. /* zakoa.c */
  2. #include <xsp2lib.h>
  3.  
  4. #include "../main.h"
  5. #include "../player.h"
  6. #include "../enemy.h"
  7. #include "../eshot.h"
  8. #include "../effect.h"
  9. #include "../psearch.h"
  10. #include "../sound.h"
  11.  
  12.  
  13. /* 関数プロトタイプ宣言 */
  14. static short EnemyMoveZakoA (ENEMY *);
  15. static void EnemyFreeZakoA (ENEMY *);
  16.  
  17.  
  18. /* 初期化ルーチン */
  19. void EnemyAllocZakoA (ENEMY * p)
  20. {
  21.     /* 左右どちらから出現したか */
  22.     if (SHORT_LX < 144)
  23.         p->vx = 8192;
  24.     else
  25.         p->vx = -8192;
  26.     p->vy = 3 * 65536;
  27.  
  28.     p->pt = obj_zako02 + 15;
  29.     p->info = 0x0700 | PRIORITY_ZAKO;    /* 数値を決めうちして入れるのはよくない */
  30.     p->hit_sx = 12;        /* 自機ショットに対する当たり判定 */
  31.     p->hit_sy = 12;
  32.     p->hp = 1;        /* 耐久力 */
  33.     p->damage = 0;
  34.     p->damage_mode = DAMAGE_THROUGH;
  35.  
  36.     p->func_enemy_move = EnemyMoveZakoA;
  37.     p->func_enemy_free = EnemyFreeZakoA;
  38.  
  39.     /* コア関連 */
  40.     p->core_info = PALET_CORE_BLUE | PRIORITY_ZAKO;
  41.     p->core_pt = sp_core + 1;
  42.  
  43.     p->m_work = 0;
  44.     p->m_work2 = 0;
  45. }
  46.  
  47.  
  48. /* 移動ルーチン */
  49. /* 返り値:非0なら消去 */
  50. static short EnemyMoveZakoA (ENEMY * p)
  51. {
  52.     /* 速度を足して上位ワード(固定整数部)だけ取り出す */
  53.     p->x = (p->lx += p->vx) >> 16;
  54.     p->y = (p->ly += p->vy) >> 16;
  55.  
  56.     /* 敵をくるくる回すアニメーション */
  57.     p->pt--;
  58.     if (p->pt < obj_zako02)
  59.         p->pt = obj_zako02 + 15;
  60.  
  61.     switch (p->m_work) {
  62.  
  63.     case 0:
  64.         if (p->m_work2++ > 64)
  65.             p->m_work++;
  66.         break;
  67.  
  68.     case 1:
  69.         if (p->vy > 32768) {
  70.             p->vy -= 8192;
  71.         } else {
  72.             p->m_work++;
  73.             p->s_work = 0;
  74.         }
  75.         break;
  76.  
  77.         /* しばらく止まって弾を撃つ */
  78.     case 2:
  79.         /* 攻撃処理 */
  80.         p->s_work++;
  81.         /* 斜め弾 */
  82.         switch (p->s_work) {
  83. #define INTERVAL2    15
  84.         case INTERVAL2 * 1:
  85.             EshotAlloc (ESHOT_NRG02, p->x, p->y, 6, psearch (p->x, p->y), 0);
  86.             SoundSetSE (SE_ESHOT);    /* 敵ショット音 */
  87.             break;
  88.         case INTERVAL2 * 2:
  89.             p->m_work++;
  90.             break;
  91.         default:
  92.             break;
  93.         }
  94.         break;
  95.  
  96.         /* 撤退 */
  97.     case 3:
  98.         if (p->vy > -2 * 65536)
  99.             p->vy -= 8192;
  100.         /* 画面外に出たら消去 */
  101.         if (SHORT_LY < -32)
  102.             return (-1);    /* 消去 */
  103.         break;
  104.     }
  105.  
  106.  
  107.     /* もし前回ダメージを受けたなら */
  108.     if (p->damage) {
  109.         p->damage = 0;
  110.         EffectAlloc (EFFECT_EXPLZAKO, 0, p->x, p->y);    /* 爆発パターンを出現させる */
  111.         EffectAlloc (EFFECT_POINTS, points_table[p->shot_count], p->x, p->y);    /* 得点を出現させる */
  112.         SoundSetSE (SE_EXPL);    /* ザコ爆発音 */
  113.         return (-1);
  114.     }
  115.     xobj_set_st (p);    /* 表示 */
  116.  
  117.     /* コアの表示 */
  118.     p->core_x = p->x - 8;
  119.     p->core_y = p->y - 8;
  120.     xsp_set_st (&(p->core_x));
  121.  
  122.     return (0);
  123. }
  124.  
  125.  
  126. /* 消去ルーチン */
  127. static void EnemyFreeZakoA (ENEMY * p)
  128. {
  129. }
  130.